﻿#pragma once
#include "stdafx1.h"

#include "Source/ProjectModule/Undo/ExtendPart/C_UndoDataBase.h"
#include "Source/ProjectModule/Undo/ExtendPart/C_UndoDataGlobalBase.h"

/*
-----==========================================================-----
		类：		场强探头模块 - 模型显示管理.h
		作者：		drill_up
		所属模块：	场强探头模块
		功能：		此类定义该模块数据所需要显示的模型。
					【只管理 数据容器 显示模型，编辑窗口的临时模型数据不管】
					（详细见cpp）
-----==========================================================-----
*/
class S_MonitorDisplayingManager : public QObject
{
	Q_OBJECT

	public:
		S_MonitorDisplayingManager();
		~S_MonitorDisplayingManager();
		static S_MonitorDisplayingManager* cur_manager;			//单例
		static S_MonitorDisplayingManager* getInstance();		//单例，获取自己
		

	//-----------------------------------
	//----模型标记（数据id - 模型id，一对一，此数据不存，打开工程时模型全部重建）
	public:
									//模型标记 - 模型重建
		void rebuildAll();


	//-----------------------------------
	//----场强探头 模型
	protected:
		QMap<QString, QStringList> m_mapProbe;
		bool m_block_refreshModel_Probe;
	public:
									//场强探头 - 刷新模型
		void refreshModel_NoUpdate_Probe(QString data_id);
		void refreshModelAll_NoUpdate_Probe();
									//场强探头 - 清理模型
		void clearModel_NoUpdate_Probe(QString data_id);
		void clearModelAll_NoUpdate_Probe();
									//场强探头 - 阻塞刷新模型
									//		【说明】：阻止模型刷新，阻止计算量浪费。
		void block_refreshModel_NoUpdate_Probe(bool enabled);
	public slots:
									//场强探头 - 设置数据显示（action）
		void action_show_Probe();
		void action_showAll_Probe();
		void action_hide_Probe();
		void action_hideAll_Probe();
		
	//-----------------------------------
	//----场强探头 模型显示
	public slots:
									//场强探头显示 - 刷新显示
		void refreshVisible_Probe(QString data_id);
		void refreshVisible_ProbeNoSignal(QString data_id);
		void refreshVisible_ProbeAll();
									//场强探头显示 - 是否显示
		bool isVisible_Probe(QString data_id);
	public:
	signals:
									//场强探头显示 - 显示变化时（信号）
		void signal_visibleChanged_Probe();
	protected:
		QStringList m_customHideList_Probe;	//隐藏列表（内部用）
	public slots:
									//场强探头显示 - 设置隐藏列表（内部用）
									//		【说明】：内部程序专用的隐藏列表，填入数据的id。
									//		【说明】：很多显示/隐藏条件都被叠加在一起，此隐藏列表只是 多个条件 的一种。
		void setCustomHideList_Probe(QStringList data_id_list);
		QStringList getCustomHideList_Probe();


	//-----------------------------------
	//----电流监视器 模型
	protected:
		QMap<QString, QStringList> m_mapCurrentMonitor;
		bool m_block_refreshModel_CurrentMonitor;
	public:
									//电流监视器 - 刷新模型
		void refreshModel_NoUpdate_CurrentMonitor(QString data_id);
		void refreshModelAll_NoUpdate_CurrentMonitor();
									//电流监视器 - 清理模型
		void clearModel_NoUpdate_CurrentMonitor(QString data_id);
		void clearModelAll_NoUpdate_CurrentMonitor();
									//电流监视器 - 阻塞刷新模型
									//		【说明】：阻止模型刷新，阻止计算量浪费。
		void block_refreshModel_NoUpdate_CurrentMonitor(bool enabled);
	public slots:
									//电流监视器 - 设置数据显示（action）
		void action_show_CurrentMonitor();
		void action_showAll_CurrentMonitor();
		void action_hide_CurrentMonitor();
		void action_hideAll_CurrentMonitor();
		
	//-----------------------------------
	//----电流监视器 模型显示
	public slots:
									//电流监视器显示 - 刷新显示
		void refreshVisible_CurrentMonitor(QString data_id);
		void refreshVisible_CurrentMonitorNoSignal(QString data_id);
		void refreshVisible_CurrentMonitorAll();
									//电流监视器显示 - 是否显示
		bool isVisible_CurrentMonitor(QString data_id);
	public:
	signals:
									//电流监视器显示 - 显示变化时（信号）
		void signal_visibleChanged_CurrentMonitor();
	protected:
		QStringList m_customHideList_CurrentMonitor;	//隐藏列表（内部用）
	public slots:
									//电流监视器显示 - 设置隐藏列表（内部用）
									//		【说明】：内部程序专用的隐藏列表，填入数据的id。
									//		【说明】：很多显示/隐藏条件都被叠加在一起，此隐藏列表只是 多个条件 的一种。
		void setCustomHideList_CurrentMonitor(QStringList data_id_list);
		QStringList getCustomHideList_CurrentMonitor();


	//-----------------------------------
	//----电压监视器 模型
	protected:
		QMap<QString, QStringList> m_mapVoltageMonitor;
		bool m_block_refreshModel_VoltageMonitor;
	public:
									//电压监视器 - 刷新模型
		void refreshModel_NoUpdate_VoltageMonitor(QString data_id);
		void refreshModelAll_NoUpdate_VoltageMonitor();
									//电压监视器 - 清理模型
		void clearModel_NoUpdate_VoltageMonitor(QString data_id);
		void clearModelAll_NoUpdate_VoltageMonitor();
									//电压监视器 - 阻塞刷新模型
									//		【说明】：阻止模型刷新，阻止计算量浪费。
		void block_refreshModel_NoUpdate_VoltageMonitor(bool enabled);
	public slots:
									//电压监视器 - 设置数据显示（action）
		void action_show_VoltageMonitor();
		void action_showAll_VoltageMonitor();
		void action_hide_VoltageMonitor();
		void action_hideAll_VoltageMonitor();
		
	//-----------------------------------
	//----电压监视器 模型显示
	public slots:
									//电压监视器显示 - 刷新显示
		void refreshVisible_VoltageMonitor(QString data_id);
		void refreshVisible_VoltageMonitorNoSignal(QString data_id);
		void refreshVisible_VoltageMonitorAll();
									//电压监视器显示 - 是否显示
		bool isVisible_VoltageMonitor(QString data_id);
	public:
	signals:
									//电压监视器显示 - 显示变化时（信号）
		void signal_visibleChanged_VoltageMonitor();
	protected:
		QStringList m_customHideList_VoltageMonitor;	//隐藏列表（内部用）
	public slots:
									//电压监视器显示 - 设置隐藏列表（内部用）
									//		【说明】：内部程序专用的隐藏列表，填入数据的id。
									//		【说明】：很多显示/隐藏条件都被叠加在一起，此隐藏列表只是 多个条件 的一种。
		void setCustomHideList_VoltageMonitor(QStringList data_id_list);
		QStringList getCustomHideList_VoltageMonitor();


	//-----------------------------------
	//----数据容器
	public slots:
										//数据容器 - 模型变化 - 某数据 被添加
		void containerDataAdded(C_UndoDataBasePtr ptr, int index);
										//数据容器 - 模型变化 - 某数据 被修改
		void containerDataModifyed(C_UndoDataBasePtr ptr, int index);
										//数据容器 - 模型变化 - 某数据 被删除
		void containerDataDeleted(C_UndoDataBasePtr ptr, int index);
										//数据容器 - 模型变化 - 某全局数据 被修改
		void containerGlobalDataModifyed(C_UndoDataGlobalBasePtr ptr);
										//数据容器 - 模型变化 - 存储数据 被读取
		void containerDataAllReloaded();
};